package com.yunpeng.aidevice.dao.mapper.relation;

import com.yunpeng.aidevice.dao.mapper.IRelationMapper;
import com.yunpeng.aidevice.dao.model.relation.UserRoleDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 用户角色配置 Mapper 接口
 * </p>
 *
 * @author hemw
 * @since 2020-04-07
 */
@Mapper
public interface UserRoleMapper extends IRelationMapper<UserRoleDO> {

    /**
     * 查询指定用户的角色代码列表
     *
     * @param userCode    用户代码
     * @param currentDate 当前时间
     * @return
     */
    List<String> queryRoleCodeListByUser(@Param(value = "userCode") String userCode, @Param(value = "currentDate") Date currentDate);


    /**
     * 查询指定用户的关联列表（当前生效）
     *
     * @param userCode    用户代码
     * @param currentDate 当前时间
     * @return
     */
    List<UserRoleDO> queryRelationListByUser(@Param(value = "userCode") String userCode, @Param(value = "currentDate") Date currentDate);

    /**
     * 根据角色代码、用户代码删除关联关系
     *
     * @param userCode 用户代码
     * @param roleCode 角色代码
     */
    void deleteByUserRole(@Param(value = "userCode") String userCode, @Param(value = "roleCode") String roleCode);

    /**
     * 根据角色代码或者用户代码统计是否存在权限关联
     *
     * @param roleCode
     * @param userCode
     * @param currentDate
     * @return
     */
    Integer existsCount(@Param(value = "roleCode") String roleCode, @Param(value = "userCode") String userCode,@Param(value = "currentDate")  Date currentDate);

    /**
     * 查询指定角色的关联列表（当前生效）
     *
     * @param roleCode    角色代码
     * @param currentDate 当前时间
     * @return
     */
    List<UserRoleDO> queryRelationListByRole(@Param(value = "roleCode") String roleCode, @Param(value = "currentDate") Date currentDate);

    /**
     * 根据用户代码删除对象
     *
     * @param userCode
     */
    void deleteByUser(@Param("userCode") String userCode);
}
